package com.ewhale.feitengguest.api;

import com.ewhale.feitengguest.dto.CheckPhoneTokenDto;
import com.ewhale.feitengguest.dto.LoginInfoDto;
import com.ewhale.feitengguest.dto.TaskListDto;
import com.simga.library.dto.EmptyDto;

import java.util.List;
import java.util.Map;

import io.reactivex.Observable;
import retrofit2.http.Field;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.Header;
import retrofit2.http.POST;
import retrofit2.http.Url;

public interface AuthApi {
    /**
     * @param phone
     * @param type  1-注册 2-忘记密码
     *              3-修改手机号、修改登录密码、绑定手机号
     * @return
     */
    @FormUrlEncoded
    @POST("app/common/getPhoneCode.json")
    Observable<EmptyDto> getCode(@Header("sessionId") String sessionId,
                                 @Field("phone") String phone,
                                 @Field("type") String type);

    /**
     * 绑定支付宝
     *
     * @param phone
     * @param phoneCode
     * @param aliAccount
     * @return
     */
    @FormUrlEncoded
    @POST("app/account/changeAliAccount.json")
    Observable<EmptyDto> bindAliAccount(@Field("phone") String phone,
                                        @Field("phoneCode") String phoneCode,
                                        @Field("aliAccount") String aliAccount);


    /**
     * 注册
     *
     * @return
     */
    @FormUrlEncoded
    @POST
    Observable<LoginInfoDto> register(@Url String url, @FieldMap Map<String, Object> params);

    /**
     * 登录
     *
     * @param userName
     * @param password
     * @return
     */
    @FormUrlEncoded
    @POST
    Observable<LoginInfoDto> login(@Url String url,
                                   @Field("userName") String userName,
                                   @Field("password") String password);

    /**
     * 重置密码
     *
     * @param registerPhone
     * @param code
     * @param registerPwd
     * @param repeatPassword
     * @return
     */
    @FormUrlEncoded
    @POST
    Observable<EmptyDto> forgetPassword(@Url String url,
                                        @Field("phone") String registerPhone,
                                        @Field("phoneCode") String code,
                                        @Field("password") String registerPwd,
                                        @Field("repeatPassword") String repeatPassword);
    @FormUrlEncoded
    @POST
    Observable<EmptyDto> forgetShopPassword(@Url String url,
                                        @Field("userName") String registerPhone,
                                        @Field("phoneCode") String code,
                                        @Field("password") String registerPwd,
                                        @Field("repeatPassword") String repeatPassword);


    /**
     * 校验旧手机号码
     *
     * @param phone
     * @param phoneCode
     * @return
     */
    @FormUrlEncoded
    @POST
    Observable<CheckPhoneTokenDto> checkPhone(@Url String url,
                                              @Field("phone") String phone,
                                              @Field("phoneCode") String phoneCode);

    /**
     * 修改手机号码
     *
     * @param phone
     * @param phoneCode
     * @return
     */
    @FormUrlEncoded
    @POST
    Observable<EmptyDto> resetPhone(@Url String url,
                                    @Field("phone") String phone,
                                    @Field("phoneCode") String phoneCode,
                                    @Field("token") String token);

    /**
     * 修改登录密码
     *
     * @param oldPassword
     * @param password
     * @param repeatPassword
     * @return
     */
    @FormUrlEncoded
    @POST
    Observable<EmptyDto> resetPassword(@Url String url,
                                       @Field("oldPassword") String oldPassword,
                                       @Field("password") String password,
                                       @Field("repeatPassword") String repeatPassword,
                                       @Field("token") String token);

    /**
     * 第三方登录
     *
     * @param params
     * @return
     */
    @FormUrlEncoded
    @POST
    Observable<LoginInfoDto> loginByThird(@Url String url,
                                          @FieldMap Map<String, Object> params);

    /**
     * 第三方登录
     *
     * @param params
     * @return
     */
    @FormUrlEncoded
    @POST
    Observable<LoginInfoDto> bindPhone(@Url String url,
                                       @FieldMap Map<String, Object> params);
}
